package dispatchers;

import java.sql.*;
import objects.*;
import util.*;
import java.io.*;

public class DBUserDispatcher{
	private DBManager dbManager;
	String tableName;
	
	public DBUserDispatcher(DBManager dbManager, String tableName){
		this.dbManager = dbManager;
		this.tableName = tableName;
	}
	
	
	private Statement getStatement(){
		try{
			return dbManager.getConnection().createStatement();
		}catch(SQLException e){
			System.out.println(e);
			return null;
		}
	}
	
	/**
		добавляет нового пользователя user в БД, если его там еще нет
	*/
	public void addUser(User user){
		StringBuilder query = new StringBuilder("INSERT INTO "+tableName);
		query.append(" ( lastName, name, middleName, nickname, password, securityLevel, registrationDate, birthDate, mail) VALUES (");
		
		query.append("\'"+user.getLastName()+"\', ");
		query.append("\'"+user.getName()+"\', ");
		query.append("\'"+user.getMiddleName()+"\', ");
		query.append("\'"+user.getNickname()+"\', ");
		query.append("\'"+user.getPassword()+"\', ");
		query.append("\'"+user.getSecurityLevel()+"\', ");
		query.append(DBManager.getStringDate(user.getRegistrationDate())+", ");
		query.append(DBManager.getStringDate(user.getBirthDate())+", ");
		query.append("\'"+user.getMail()+"\');");
		
		try{
			getStatement().execute(query.toString());
		}catch(SQLException e){
			System.out.println("Error: "+e);
		}
	}
	
	
	/**
		удаляет пользователя user из БД
	*/
	public void delUser(User user){
		String query = "DELETE FROM "+tableName+" WHERE mail="+user.getMail()+" ;";
		try{
			getStatement().execute(query.toString());
		}catch(SQLException e){ 
			System.out.println("Error: "+e);
		}
	}
	
	
	/**
		возвращает пользователя из БД по его почтовому ящику. Если такового нет, возвращает null
	*/
	public User getUser(String mail){
		String query = "SELECT * FROM "+tableName+" WHERE mail = \'"+mail+"\' ;";
		ResultSet resultSet;
		User user = new User();
		
		try{
			resultSet = getStatement().executeQuery(query.toString());			
			if(!resultSet.next())
				return null;
			
			user.setUserID(resultSet.getInt("userID"));
			user.setName(resultSet.getString("name"));
			user.setLastName(resultSet.getString("lastName"));
			user.setMiddleName(resultSet.getString("middleName"));
			user.setNickname(resultSet.getString("nickname"));
			user.setPassword(resultSet.getString("password"));
			user.setSecurityLevel(resultSet.getInt("securityLevel"));
			user.setMail(mail);

		}catch(SQLException e){
			System.out.println("Error: "+e);
			return null;
		}
		return user;		
	}
	
	
	/**
		проверяет, зарегистрирован ли данный пользователь на сайте
	*/
	public boolean isUser(String mail){
		try{
			String query = "SELECT * FROM "+tableName+" mail=\'"+mail+"\'";
			ResultSet resultSet = getStatement().executeQuery(query);			
			if(resultSet.next())
				return true;
			else return false;

		}catch(SQLException e){
			System.out.println("Error: "+e);
			return false;
		}
	}

	
	/**
		проверяет, можно выполнить вход пользователю с данным набором логина и пароля
	*/
	public boolean canInput(String mail, String password){
		try{
			String query = "SELECT * FROM "+tableName+" WHERE (mail=\'"+mail+"\')AND(password="+"\'"+password+"\');";
			ResultSet resultSet = getStatement().executeQuery(query);			
			if(resultSet.next())
				return true;
			else return false;

		}catch(SQLException e){
			System.out.println("Error: "+e);
			return false;
		}
	}
	
	public static void main(String args[]){
		DBManager dbManager = new DBManager("anagram", "root", "root");
		DBUserDispatcher ud = new DBUserDispatcher(dbManager, "users");
		User user = ud.getUser("pavel.14@mail.ru");
		
		try{
			PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out, "Cp866"), true);
			pw.println(user.getName());
		}catch(Exception e){
			System.out.println(e);
		}
	}
	
}